package HashSet集合的基层原理;

public class Test {
    public static void main(String[] args) {
        // 目标: 了解一下哈希值
        // Java中的所有对象, 都可以调用Object类提供的hashCode方法, 返回该对象自己的哈希值.
        //     public int hashCode(): 返回对象的哈希值
        // 同一个对象多次调用hashCode()方法返回的哈希值是一样的
        // 不同的对象, 他们的哈希值一般不相同, 但也有可能会相同(哈希碰撞).

        Student s1 = new Student("蜘蛛精",25,169.5);
        Student s2 = new Student("紫霞",22,166.5);
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());//不同对象值不同
        System.out.println(s1.hashCode());//多次调用相同

        // 课程上发生哈希碰撞, 而现在两个哈希值不一样
        String str1 = "abc";
        String str2 = "abD";
        System.out.println(str1.hashCode());
        System.out.println(str2.hashCode());

        // 哈希表
        // jdk8之前: 哈希表 = 数组 + 链表
        // jdk8后 : 哈希表 = 数组 + 链表 + 红黑树
        // 哈希表是一种增删改查数据性能都较好的结构
    }
}
